#include <iostream>

// // 饿汉模式
// class Singleton
// {
// public:

//     Singleton(const Singleton &) = delete;
//     Singleton &operator=(const Singleton &) = delete;

//     static Singleton &getInstance()
//     {
//         return _inst;
//     }

//     int getData()
//     {
//         return _data;
//     }

// private:
//     static Singleton _inst;
//     int _data;

//     Singleton() :_data(99) 
//     {
//         std::cout << "单例构造" << std::endl;
//     }
//     ~Singleton() {}
// };
// Singleton Singleton::_inst;

// 懒汉模式 延迟加载
class Singleton
{
public:
    Singleton(const Singleton &) = delete;
    Singleton &operator=(const Singleton &) = delete;

    static Singleton& getInstance()
    {
        static Singleton instan;
        return instan;
    }

    int getData()
    {
        return _data;
    }

private:
    int _data;

    Singleton() :_data(99) 
    {
        std::cout << "单例构造" << std::endl;
    }
    ~Singleton() {}
};

int main()
{
    std::cout << Singleton::getInstance().getData() << std::endl;
    return 0;
}